// 整个项目的请求方法所在的文件
// axios相关  req  res  =>   给外部提供数据

axios.defaults.baseURL = `http://ajax.frontend.itheima.net`

const { layer } = window.layui

// 添加请求拦截器
axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // console.log('请求拦截器------', config) // headers
    // console.log(config.url) // /my/userinfo
    // url如果是以/api开头  需要设置
    // 反之, /my  不需要
    // if (config.url !== '/api/reguser' || config.url !== '/api/login') {

    if (!config.url.startsWith('/api')) {
      const AUTH_TOKEN = window.localStorage.getItem('token')
      config.headers['Authorization'] = AUTH_TOKEN
    }

    // }
    // config.headers.Authorization = AUTH_TOKEN;
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
// .then之前
axios.interceptors.response.use(
  function (response) {
    // response=>res
    // console.log('res的拦截器进来了-----------',response)
    // ?? 处理所有请求对应的res结果=>  if status  弹窗
    const { status, message } = response.data
    layer.msg(message)
    if (status === 0) {
      // console.log('token没失效 正确的可用res');
    }
    // Warning=====================status 403开头
    if (status === 1) {
      window.localStorage.removeItem('token')
      window.location.href = '/login.html'
    }
    // 对响应数据做点什么
    return response
  },
  function (error) {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

// baseUrl =>  封装 => 用什么封装
// let baseUrl = `http://ajax.frontend.itheima.net`
// axios=>查看axios文档=>baseUrl

// 全局设置请求
// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;

const postReguser = (dataStr, cb) => {
  axios.post(`/api/reguser`, dataStr).then((res) => {
    // .then后的代码
    // console.log('.then里面的代码---------')
    cb(res)
  })
}

const postLogin = (dataStr, cb) => {
  axios.post(`/api/login`, dataStr).then((res) => {
    // console.log('.then里面的代码---------')
    cb(res)
  })
}

// 获取用户信息
// 该请求的接口文档=>  设置header请求头
// -> Authorization:token值
const getInfoUser = (cb) => {
  axios.get(`/my/userinfo`).then((res) => {
    // console.log('请求发起了----')
    cb(res)
  })
}

// 修改用户信息

const postUpdateUserInfo = (data, cb) => {
  axios.post(`/my/userinfo`, data).then((res) => {
    cb(res)
  })
}

const abcdefgEfefGefef = (data, cb) => {
  axios.post(`/my/userinfo`, data).then((res) => {
    cb(res)
  })
}

// 重置密码
const postResetPwd = (data, cb) => {
  axios.post(`/my/updatepwd`, data).then((res) => {
    cb(res)
  })
}

// 更换头像
// "avatar=base64格式的字符串"
const postAvatar = (data, cb) => {
  axios.post(`/my/update/avatar`, data).then((res) => {
    cb(res)
  })
}

// 文章分类列表
const getCateList = (cb) => {
  axios.get(`/my/article/cates`).then((res) => {
    cb(res)
  })
}

// 新增文章分类
const postCateAdd = (data, cb) => {
  axios.post(`/my/article/addcates`, data).then((res) => {
    cb(res)
  })
}
// 删除文章分类
// Id=>文章1的id =>
const getCateDeleById = (Id, cb) => {
  // 接口文档中url的参数:id =>
  axios.get(`/my/article/deletecate/${Id}`).then((res) => {
    cb(res)
  })
}

// 编辑文章分类

const postCateEdit = (data, cb) => {
  axios.post(`/my/article/updatecate`, data).then((res) => {
    cb(res)
  })
}

// 发布新文章
// title	是	string	文章标题
// cate_id	是	int	所属分类 Id
// content	是	string	文章内容
// cover_img	是	blob二进制	文章封面
// state	是	string	状态，可选值为：已发布、草稿
// 注意!!!=>  请求体的格式是  formData类型 => 形参data对应的实参必须是formData类型

const postArticleAdd = (data, cb) => {
  axios.post(`/my/article/add`, data).then((res) => {
    cb(res)
  })
}
// 文章列表
// pagenum	是	int	页码值   1
// pagesize	是	int	每页显示多少条数据    2
// cate_id	否	string	文章分类的 Id
// state	否	string	文章的状态，可选值有：已发布、草稿
const getArticles = (data, cb) => {
  // axios的get请求的参数怎么写=>axios文档
  // params:{}
  axios
    .get(`/my/article/list`, {
      params: data,
    })
    .then((res) => {
      cb(res)
    })
}

/*
const getInfoUser = (cb)=>{
  axios.get(`/my/userinfo`,{
    headers:{
      Authorization:window.localStorage.getItem('token')
    }
  }).then((res) => {
    console.log('请求发起了----')
    cb(res)
  })
}

*/
// axios => 全局设置 或者  其他设置方法 设置headers

// 持久化
// 后端mysql
// 后端文件读取
// 前端模拟后端能力 indexDB => 事务
// node => fs +  数据中间层

// 网页销毁后 数据依然存在=>
// 前端: 浏览器里面 => WebStorage
//  localStorage
//  sessionStorage

// 字符串的新增API
// startsWith()
// endsWith()
// includes()
